//
// Created by ZYZ on 2020/6/18.
//

#ifndef TESTALGORITHM_LINEAR_QUEUE_H
#define TESTALGORITHM_LINEAR_QUEUE_H

//构造一个空队列 Q
Status InitQueue (SqQueue &Q);

//销毁队列 Q, Q 不再存在
Status DestroyQueue(SqQueue &Q);

//将 Q 清为空队列
Status ClearQueue(SqQueue &Q);

//若队列 Q 为空队列，则返回 TRUE，否则返回 FALSE
Status QueueEmpty(SqQueue Q);

//返回 Q 的元素个数，即为队列的长度
int QueueLength(SqQueue Q);

//若队列不空，则用 e 返回 Q 的队头元素，并返回 OK；否则返回 ERC
Status GetHead(SqQueue Q, QElemType &e);

//插人元素 e 为 Q 的新的队尾元素
Status EnQueue(SqQueue &Q, QElemType e);

//若队列不空，则删除 Q 的队头元素，用 e 返回其值，并返回 OK;
//否则返回 ERROR
Status Dequeue(SqQueue &Q, QElemType &e);

//从队头到队尾依次对队列 Q 中每个元素调用函数 visit（）。一且 visit 失败，则操作失败
Status QueueTraverse(SqQueue Q, Status  (* visit) (QElemType e));

#endif //TESTALGORITHM_LINEAR_QUEUE_H
